perm filename SOPG.DIF[S1,ALS] blob
sn#444126 filedate 1979-05-24 generic text, type T, neo UTF8
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 1,1
**** File 1) SOPZ12.PAS[SOP,S1], Page 1 line 1
1) COMMENT ⊗ VALID 00062 PAGES
1) C REC PAGE DESCRIPTION
**** File 2) SOPG14.PAS[SOP,S1], Page 1 line 1
2) COMMENT ⊗ VALID 00063 PAGES
2) C REC PAGE DESCRIPTION
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 1 line 6
1) C00016 00004
1) C00022 00005 (* Constants fixed by S1 architecture... *)
1) C00027 00006 type
1) C00053 00007 var
1) C00064 00008 (** ERROR_CLASS: FLDW ERREXIT ASSERTFAIL ERROR **)
1) C00081 00009 (** DEBUGGING_CLASS: PRINTSET PRINTMEMOREG PRINTDATUM PRINT_NESTITEM PRINT_MSTENTRY PRINTNXTINST PRINTNAM PRINTTYP PRINTINT **)
1) C00093 00010 (** S1WORD_PROCESSOR_CLASS: NEWCODEREC GETFIELD GETSIGNEDFIELD PUTFIELD **)
1) C00100 00011 (** S1WORD_PROCESSOR_CLASS: REAL_TO_S1WORD ZSYMBOL_TO_S1WORDS INTEGER_TO_S1WORD SETREP_TO_S1WORDS **)
1) C00110 00012 (** MISCELLANEOUS_CLASS: LABELHASH LABELNUMBER MIN MAX POWER2 FLDW CVCHR_S1WORD_4 CVOS_S1WORD_12 CVOS_12 CVOS_10 CSP_HASH OPC_HASH NAME_TO_CSP MNEM_TO_OPC **)
1) C00118 00013 (** INSTRUCTION_PROCESSOR_CLASS: PTR_OPNDXWD S1OPNDS_EQUAL S1OPND_TEMPLOC GETS1OPCODE AFTER_LAST_XWORD JUMPSKIPDEST NEXT_INSTRUCTION AFTER_FAKEOPS AFTER_NONS1LOC_FAKEOPS INVERT_SKIP INVERT_OPCODE **)
1) C00139 00014 (** INSTRUCTION_PROCESSOR_CLASS: DELETE_INSTR INSERT_OPND1 PEEP_LOC_IS_FREE SWAP_OPERANDS INSTR_WORDS PRINTMAINCODE **)
1) C00154 00015 (** FIXUP_CLASS: FIXSOP FIXJOP FIXOPND2 **)
1) C00159 00016 (** FIXUP_CLASS: ADD_CODEPTR_TO_CODELIST ADD_JUMPLIST_PLUS_ONE ADD_JUMP_TO_JUMPLIST JUMP_TO_TABLE_RECORD_OR_FIX JUMP_TO_LABEL_RECORD_OR_FIX OPND2_RECORD_OR_FIX **)
1) C00165 00017 (** OPERAND_PROCESSOR_CLASS: ISREG IS_T_REG IS_T_REG_NOT_RT ISSHORTCONST ISCONST EQUAL_OPERANDS REG_OPERAND IMM_OPERAND REAL_IMM_OPERAND IS_RT IS_RTA IS_RTB USES_RTA USES_RTB **)
1) C00174 00018 (** OPERAND_PROCESSOR_CLASS: EXTENDED_IMM_OPERAND REGDISP_OPERAND EXTENDED_REGDISP_OPERAND EXT_REGADDR_OPERAND ADDR_OPERAND **)
1) C00178 00019 (** REGISTER/GLOBAL_MANAGEMENT_CLASS: ALLOCGBL FREEGBL_S ALLOCRG ALLOCRP FREERG_S FINDRP FINDRG MOVE_AND_FREE_RTB CURRENT_PARMREG_COUNT IS_PARMREG CHECK_DSP_TMP_COLLISION RESERVE_PARMREGS **)
1) C00188 00020 (** REGISTER/GLOBAL_MANAGEMENT_CLASS: FREEDATUMREGS FREEREGSBUTONE FREERGSBUTSOME FREEVPAREG FREEVPARGUNLESS FREE_TEMP_REGS **)
1) C00196 00021 (** CODE_EMITTER_CLASS: BUILD_CW_OPERAND EMIT_INSTR_OPNDS INSERT_INSTR_OPNDS **)
1) C00205 00022 (** CODE_EMITTER_CLASS: EMITFAKEINST INSERTSOP INSERTJOP INSERTXOP EMIT_S1WORD EMIT_ZEROS1WORD **)
1) C00212 00023 (** CODE_EMITTER_CLASS: EMITSOP EMITJOP EMITTOP EMITXOP ALLOC_AND_EMIT_TOP **)
1) C00221 00024 (** DATUM_PROCESSOR_CLASS: REG_DATUM COERCE_DATUM COERCE_TWO_DATUMS DATUM_ISFREE_REG DATUM_IS_REG DATUM_IS_T_REG DATUM_IS_FILADR LOADSTACKEXCEPT BJUMP_TO_BINTVAL INCREMENT_DATUM **)
1) C00240 00025 (** DATUM_PROCESSOR_CLASS: BINTVAL_TO_BJUMP PARMREG_TO_PARMSAVE TRANSLATE_LVLDSP **)
1) C00246 00026 (** DATUM_PROCESSOR_CLASS: IS_SIMPLE FITS_SHRT_OFFSET FITS_SHORT_INDEX IS_CONSTANT IS_CONST_PLUS_OPND PUSHTOP POPTOP **)
1) C00251 00027 (** LITERAL_TABLE_CLASS: UPD_REALTBL UPD_SETTBL UPD_PROCTBL **)
1) C00255 00028 (** LITERAL_TABLE_CLASS: UPD_LBLTBL UPD_BOUNDTBL **)
1) C00263 00029 (** GET_OPERAND_CLASS: INSERT_SHORT_VPA VPA_OPERAND_NOSHIFT FIT_IN_OPERAND **)
1) C00272 00030 (** GET_OPERAND_CLASS: FIT_ADDRESS_IN_OPERAND **)
1) C00277 00031 (** GET_OPERAND_CLASS: GET_OPERAND GET_SHORT_OPERAND GET_ADDRESS **)
1) C00280 00032 (** GET_OPERAND_CLASS: MOVE_QUANTITY SLR_QUANTITY COERCE_AND_MOVE_QUANTITY STORE **)
1) C00287 00033 (** SIMPLIFY_CLASS: ADD_SUB_SINGLE INC_OR_DEC ADD_TOP_TWO_DATUMS MULT_SINGLE SIMPLIFY ADD_VPAS FPA_LVL_PLUS_VPA1 FPA_DSPLMT_PLUS_VPA1 VPA_FPA_FINALIND SHORT_AND_REG CALCULATE_FPA DEREF_AND_SHIFT SHIFT_VPA1 DEREF DEREF_TO_END **)
1) C00319 00034 (** DISASSEMBLE_CLASS: DISASSEMBLE PRINTLOC PRINTIWORD PRINTXWRD1 PRINTXWRD2 PRINTOPERAND PRINTREG PRINT_SIGNED_OCTAL PRINTSHORTOP **)
1) C00345 00035 (** OBJECT_MODULE_SEGMENT_CLASS: CODE_CONCRETIZER CONC_PASS1 INSERT_S1LOC JMPX_TO_JMPA_OPT **)
1) C00354 00036 (** OBJECT_MODULE_SEGMENT_CLASS: PEEPHOLE_OPTIMIZER SKIP_JMPA_OPT COLLAPSE_MOV_OPT **)
1) C00365 00037 (** OBJECT_MODULE_SEGMENT_CLASS: PEEPHOLE_OPTIMIZER **)
1) C00371 00038 (** OBJECT_MODULE_SEGMENT_CLASS: CONC_PASS3 PASS3PCRELFIX INSERT_NOP **)
1) C00391 00039 (** OBJECT_MODULE_SEGMENT_CLASS: INIT_SEGMENT GEN_SEGMENT FIXDISP OPEN_SEGMENT CLOSE_SEGMENT CLEAROUT_TXTBUF OPEN_TXT CLOSE_TXT OUT_TXT **)
1) C00400 00040 (** OBJECT_MODULE_SEGMENT_CLASS: OPEN_SEG CLOSE_SEG OUT_SEG OPEN_ESD CLOSE_ESD OUT_ESD OPEN_ESR CLOSE_ESR OUT_ESR OPEN_RLD CLOSE_RLD OUT_RLD **)
1) C00407 00041 (** OBJECT_MODULE_SEGMENT_CLASS **)
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 1,1
1) C00416 00042 (** OBJECT_MODULE_SEGMENT_CLASS **)
1) C00423 00043 (** CALLSTANDARD_CLASS: SAVE_PARMREGS RESTORE_PARMREGS CALLSTANDARD GENCALL ONE_ARG TWO_SINGLE_ARGS CHECKFILADR ALLOC_EXCESS EXCESS_ARG DEALLOC_EXCESS CHECK_REF_PARM RESULT_PARM **)
1) C00445 00044 (** ASMNXTINST_CLASS: ASMNXTINST CASE1 **)
1) C00454 00045 (** ASMNXTINST_CLASS: CASE2 **)
1) C00463 00046 (** ASMNXTINST_CLASS: CASE3 **)
1) C00471 00047 (** ASMNXTINNT_CLASS: CASE4 CASE5 **)
1) C00487 00048 (** ASMNXTINST_CLASS: CASE6 CASE7 **)
1) C00505 00049 (** ASMNXTINST_CLASS: CASE8 **)
1) C00524 00050 (** ASMNXTINST_CLASS: CASE9 **)
1) C00538 00051 (** ASMNXTINST_CLASS: CASE10 **)
1) C00549 00052 (** ASMNXTINST_CLASS: **)
1) C00558 00053 (** READNXTINST_CLASS: READNXTINST READNAM READTYP READINT READREAL READSET READSET **)
1) C00568 00054 (** INITIALIZE_CLASS: INITIALIZE ENTER_OPC ENTER_CSP INIT1 **)
1) C00589 00055 (** INITIALIZE_CLASS: INIT2 **)
1) C00602 00056 (** INITIALIZE_CLASS: INIT3 **)
1) C00622 00057 (** INITIALIZE_CLASS: INIT4 **)
1) C00656 00058 (** INITIALIZE_CLASS: INIT5 **)
1) C00678 00059 (** INITIALIZE_CLASS: INIT6 **)
1) C00683 00060 (** INITIALIZE_CLASS: INIT7 **)
1) C00704 00061 (** INITIALIZE_CLASS: **)
1) C00705 00062 (** MAIN_PROGRAM: **)
1) C00710 ENDMK
1) C⊗;
1) (*PROGRAM HEADER PAGE*)
1) (*PAS10 OPTIONS*) (*$D+,R32,S1300*) (*X10S1*)
1) (* DEFAULT
**** File 2) SOPG14.PAS[SOP,S1], Page 1 line 6
2) C00016 00004 (* Compiler-option constants... *)
2) C00022 00005 (* Constants fixed by S1 architecture... *)
2) C00029 00006 type
2) C00056 00007 var
2) C00067 00008 (** ERROR_CLASS: FLDW ERREXIT ASSERTFAIL ERROR **)
2) C00084 00009 (** DEBUGGING_CLASS: PRINTSET PRINTMEMOREG PRINTDATUM PRINT_NESTITEM PRINT_MSTENTRY PRINTNXTINST PRINTNAM PRINTTYP PRINTINT **)
2) C00096 00010 (** SETREP_PROCESSOR_CLASS: SET_IN SET_DIF SET_INT SET_UNI BUILD_SET *)(*setch*)
2) C00101 00011 (** S1WORD_PROCESSOR_CLASS: NEWCODEREC GETFIELD GETSIGNEDFIELD PUTFIELD **)
2) C00108 00012 (** S1WORD_PROCESSOR_CLASS: REAL_TO_S1WORD ZSYMBOL_TO_S1WORDS INTEGER_TO_S1WORD SETREP_TO_S1WORDS **)
2) C00118 00013 (** MISCELLANEOUS_CLASS: LABELHASH LABELNUMBER MIN MAX POWER2 FLDW CVCHR_S1WORD_4 CVOS_S1WORD_12 CVOS_12 CVOS_10 CSP_HASH OPC_HASH NAME_TO_CSP MNEM_TO_OPC **)
2) C00126 00014 (** INSTRUCTION_PROCESSOR_CLASS: PTR_OPNDXWD S1OPNDS_EQUAL S1OPND_TEMPLOC GETS1OPCODE AFTER_LAST_XWORD JUMPSKIPDEST NEXT_INSTRUCTION AFTER_FAKEOPS AFTER_NONS1LOC_FAKEOPS INVERT_SKIP INVERT_OPCODE **)
2) C00147 00015 (** INSTRUCTION_PROCESSOR_CLASS: DELETE_INSTR INSERT_OPND1 PEEP_LOC_IS_FREE SWAP_OPERANDS INSTR_WORDS PRINTMAINCODE **)
2) C00162 00016 (** FIXUP_CLASS: FIXSOP FIXJOP FIXOPND2 **)
2) C00167 00017 (** FIXUP_CLASS: ADD_CODEPTR_TO_CODELIST ADD_JUMPLIST_PLUS_ONE ADD_JUMP_TO_JUMPLIST JUMP_TO_TABLE_RECORD_OR_FIX JUMP_TO_LABEL_RECORD_OR_FIX OPND2_RECORD_OR_FIX **)
2) C00173 00018 (** OPERAND_PROCESSOR_CLASS: ISREG IS_T_REG IS_T_REG_NOT_RT ISSHORTCONST ISCONST EQUAL_OPERANDS REG_OPERAND IMM_OPERAND REAL_IMM_OPERAND IS_RT IS_RTA IS_RTB USES_RTA USES_RTB **)
2) C00182 00019 (** OPERAND_PROCESSOR_CLASS: EXTENDED_IMM_OPERAND REGDISP_OPERAND EXTENDED_REGDISP_OPERAND EXT_REGADDR_OPERAND ADDR_OPERAND TWIDDLE_OPERAND **)
2) C00189 00020 (** REGISTER/GLOBAL_MANAGEMENT_CLASS: ALLOCGBL FREEGBL_S ALLAREFREE ALLOCRG ALLOCRP FREERG_S FINDRGBLOCK FINDRP FINDRG MOVE_AND_FREE_RTB CURRENT_PARMREG_COUNT IS_PARMREG CHECK_DSP_TMP_COLLISION RESERVE_PARMREGS **)
2) C00202 00021 (** REGISTER/GLOBAL_MANAGEMENT_CLASS: FREEDATUMREGS FREEREGSBUTONE FREERGSBUTSOME FREEVPAREG FREEVPARGUNLESS FREE_TEMP_REGS **)
2) C00210 00022 (** CODE_EMITTER_CLASS: BUILD_CW_OPERAND EMIT_INSTR_OPNDS INSERT_INSTR_OPNDS **)
2) C00219 00023 (** CODE_EMITTER_CLASS: EMITFAKEINST INSERTSOP INSERTJOP INSERTXOP EMIT_S1WORD EMIT_ZEROS1WORD **)
2) C00226 00024 (** CODE_EMITTER_CLASS: EMITSOP EMITJOP EMITTOP EMITXOP ALLOC_AND_EMIT_TOP **)
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 1,1
2) C00235 00025 (** DATUM_PROCESSOR_CLASS: REG_DATUM COERCE_DATUM COERCE_TWO_DATUMS DATUM_ISFREE_REG DATUM_IS_REG DATUM_IS_T_REG DATUM_IS_FILADR XCHANGE_STKENTS LOADSTACKEXCEPT BJUMP_TO_BINTVAL INCREMENT_DATUM **)
2) C00254 00026 (** DATUM_PROCESSOR_CLASS: BINTVAL_TO_BJUMP PARMREG_TO_PARMSAVE TRANSLATE_LVLDSP **)
2) C00260 00027 (** DATUM_PROCESSOR_CLASS: IS_SIMPLE FITS_SHRT_OFFSET FITS_SHORT_INDEX IS_CONSTANT IS_CONST_PLUS_OPND PUSHTOP POPTOP **)
2) C00265 00028 (** LITERAL_TABLE_CLASS: UPD_REALTBL UPD_SETTBL UPD_PROCTBL **)
2) C00270 00029 (** LITERAL_TABLE_CLASS: UPD_LBLTBL UPD_BOUNDTBL **)
2) C00278 00030 (** GET_OPERAND_CLASS: INSERT_SHORT_VPA VPA_OPERAND_NOSHIFT FIT_IN_OPERAND **)
2) C00287 00031 (** GET_OPERAND_CLASS: FIT_ADDRESS_IN_OPERAND **)
2) C00292 00032 (** GET_OPERAND_CLASS: GET_OPERAND GET_SHORT_OPERAND GET_ADDRESS **)
2) C00295 00033 (** GET_OPERAND_CLASS: MOVE_QUANTITY SLR_QUANTITY COERCE_AND_MOVE_QUANTITY STORE **)
2) C00302 00034 (** SIMPLIFY_CLASS: ADD_SUB_SINGLE INC_OR_DEC ADD_TOP_TWO_DATUMS MULT_SINGLE SIMPLIFY ADD_VPAS FPA_LVL_PLUS_VPA1 FPA_DSPLMT_PLUS_VPA1 VPA_FPA_FINALIND SHORT_AND_REG CALCULATE_FPA DEREF_AND_SHIFT SHIFT_VPA1 DEREF DEREF_TO_END **)
2) C00334 00035 (** DISASSEMBLE_CLASS: DISASSEMBLE PRINTLOC PRINTIWORD PRINTXWRD1 PRINTXWRD2 PRINTOPERAND PRINTREG PRINT_SIGNED_OCTAL PRINTSHORTOP **)
2) C00360 00036 (** OBJECT_MODULE_SEGMENT_CLASS: CODE_CONCRETIZER CONC_PASS1 INSERT_S1LOC JMPX_TO_JMPA_OPT **)
2) C00369 00037 (** OBJECT_MODULE_SEGMENT_CLASS: PEEPHOLE_OPTIMIZER SKIP_JMPA_OPT COLLAPSE_MOV_OPT **)
2) C00380 00038 (** OBJECT_MODULE_SEGMENT_CLASS: PEEPHOLE_OPTIMIZER **)
2) C00386 00039 (** OBJECT_MODULE_SEGMENT_CLASS: CONC_PASS3 PASS3PCRELFIX INSERT_NOP **)
2) C00406 00040 (** OBJECT_MODULE_SEGMENT_CLASS: INIT_SEGMENT GEN_SEGMENT FIXDISP OPEN_SEGMENT CLOSE_SEGMENT CLEAROUT_TXTBUF OPEN_TXT CLOSE_TXT OUT_TXT **)
2) C00415 00041 (** OBJECT_MODULE_SEGMENT_CLASS: OPEN_SEG CLOSE_SEG OUT_SEG OPEN_ESD CLOSE_ESD OUT_ESD OPEN_ESR CLOSE_ESR OUT_ESR OPEN_RLD CLOSE_RLD OUT_RLD **)
2) C00422 00042 (** OBJECT_MODULE_SEGMENT_CLASS **)
2) C00431 00043 (** OBJECT_MODULE_SEGMENT_CLASS **)
2) C00438 00044 (** CALLSTANDARD_CLASS: SAVE_PARMREGS RESTORE_PARMREGS CALLSTANDARD GENCALL ONE_ARG TWO_SINGLE_ARGS CHECKFILADR ALLOC_EXCESS EXCESS_ARG DEALLOC_EXCESS CHECK_REF_PARM RESULT_PARM **)
2) C00460 00045 (** ASMNXTINST_CLASS: ASMNXTINST CASE1 **)
2) C00469 00046 (** ASMNXTINST_CLASS: CASE2 **)
2) C00478 00047 (** ASMNXTINST_CLASS: CASE3 **)
2) C00487 00048 (** ASMNXTINNT_CLASS: COMPARE_SETS CASE4 CASE5 **)
2) C00509 00049 (** ASMNXTINST_CLASS: CASE6 CASE7 **)
2) C00529 00050 (** ASMNXTINST_CLASS: CASE8 **)
2) C00548 00051 (** ASMNXTINST_CLASS: CASE9 **)
2) C00563 00052 (** ASMNXTINST_CLASS: CASE10 **)
2) C00574 00053 (** ASMNXTINST_CLASS: **)
2) C00584 00054 (** READNXTINST_CLASS: READNXTINST READNAM READTYP READINT READREAL READSET READSET **)
2) C00594 00055 (** INITIALIZE_CLASS: INITIALIZE ENTER_OPC ENTER_CSP INIT1 **)
2) C00616 00056 (** INITIALIZE_CLASS: INIT2 **)
2) C00629 00057 (** INITIALIZE_CLASS: INIT3 **)
2) C00649 00058 (** INITIALIZE_CLASS: INIT4 **)
2) C00683 00059 (** INITIALIZE_CLASS: INIT5 **)
2) C00705 00060 (** INITIALIZE_CLASS: INIT6 **)
2) C00710 00061 (** INITIALIZE_CLASS: INIT7 **)
2) C00731 00062 (** INITIALIZE_CLASS: **)
2) C00732 00063 (** MAIN_PROGRAM: **)
2) C00737 ENDMK
2) C⊗;
2) (*PROGRAM HEADER PAGE*)
2) (*PAS10 OPTIONS*) (*$D+,R32,S1600*) (*X10S1*)
2) (* DEFAULT
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 4 line 6
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 4,4
1) CHARDIF = 40B; (*CHARDIF*) (*X10S1*)
1) (*CHARDIF = 0; *) (*CHARDIF*) (*X10S1*)
**** File 2) SOPG14.PAS[SOP,S1], Page 4 line 5
2) CHARDIF = 0; (*setch*)
2) "CHARDIF = 40B;" (*CHARDIF*) (*X10S1*)
2) (*CHARDIF = 0; *) (*CHARDIF*) (*X10S1*)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 5 line 56
1) MAXSETEL = 63; (*Change this when we do 4-word sets.*)
1) OPCODE_START = 0; OPCODE_LEN = 12;
**** File 2) SOPG14.PAS[SOP,S1], Page 5 line 57
2) (*setch...*) (*X10S1...*)
2) SET_SIZE = 144; (*Number of set elements on the S1.*)
2) SET_MAX = 143; (*Max legal value of a set element on the S1.*)
2) HOST_SET_SIZE = 72; (*Number of set elements/set in host compiler.*)
2) HOST_SET_MAX = 71; (*Max legal value of a host set element.*)
2) SETREP_MAX = 1; (*Number of host sets used/set - 1.*)
2) S1SETREP_SIZE = 4; (*Number of S1 words used/set.*)
2) S1SETREP_MAX = 3; (*Number of S1 words used/set - 1.*)
2) NUMOFSETPARTS = 2; (*Number of double-word parts/set.*)
2) SETPART_MAX = 1; (*Number of double-word parts/set - 1.*)
2) NUMOFSETOPND = 9; (*Number of operands in PCode LDC S,(---) ins.*)
2) (*...setch*) (*...X10S1*)
2) "(*setch...*) (*X10S1...*)
2) SET_SIZE = 144; (*Number of set elements on the S1.*)
2) SET_MAX = 143; (*Max legal value of a set element on the S1.*)
2) HOST_SET_SIZE = 144; (*Number of set elements/set in host compiler.*)
2) HOST_SET_MAX = 143; (*Max legal value of a host set element.*)
2) S1SETREP_SIZE = 4; (*Number of S1 words used/set.*)
2) S1SETREP_MAX = 3; (*Number of S1 words used/set - 1.*)
2) NUMOFSETPARTS = 2; (*Number of double-word parts/set.*)
2) SETPART_MAX = 1; (*Number of double-word parts/set - 1.*)
2) NUMOFSETOPND = 9; (*Number of operands in PCode LDC S,(---) ins.*)
2) (*...setch*) (*...X10S1*)"
2) OPCODE_START = 0; OPCODE_LEN = 12;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 6 line 393
1) S1GBL = FIRSTS1GBL..LASTS1GBL;
**** File 2) SOPG14.PAS[SOP,S1], Page 6 line 393
2) SETOFS1REGS = set of S1REGISTER; (*PEG*)
2) S1GBL = FIRSTS1GBL..LASTS1GBL;
***************
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 6,6
**** File 1) SOPZ12.PAS[SOP,S1], Page 6 line 427
1) SETREP = set of 0..MAXSETEL;
1) CHAR2 = packed array [1..2] of char;
**** File 2) SOPG14.PAS[SOP,S1], Page 6 line 428
2) (*When *real* S1 words exist, this will just be an integer.*)
2) S1WORD = (*Moved by PEG to resolve forward ref. by S1SETREP.*)(*setch*)
2) record
2) LHALF, RHALF : integer
2) end (*S1WORD*);
2) (*setch...*)
2) HOST_SET_EL_TYP = 0..HOST_SET_MAX;
2) HOST_SET_TYP = set of HOST_SET_EL_TYP; (*Set available on host machine.*)
2) SET_EL_TYP = 0..SET_MAX;
2) SETREP_INDEX = 0..SETREP_MAX; (*X10S1*)
2) SETREP = array [SETREP_INDEX] of HOST_SET_TYP; (*X10S1*)
2) (*SOPA-internal representation of full S1 set.*)
2) (* SETREP = HOST_SET_TYP; *) (*X10S1*)
2) S1SETREP_INDEX = 0..S1SETREP_MAX;
2) S1SETREP = array [S1SETREP_INDEX] of S1WORD; (*S1 set representation.*)
2) SETPART_INDEX = 0..SETPART_MAX;
2) (*...setch*)
2) char = ascii; (*X10S1-- PEG*)
2) CHAR2 = packed array [1..2] of char;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 6 line 448
1) (*When *real* S1 words exist, this will just be an integer.*)
1) S1WORD =
1) record
1) LHALF, RHALF : integer
1) end (*S1WORD*);
1) CODEREC =
**** File 2) SOPG14.PAS[SOP,S1], Page 6 line 474
2) CODEREC =
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 6 line 657
1) PCNST : SETREP; (*set value if set constant*)
1) RCNST : real; (*real value if real constant*)
**** File 2) SOPG14.PAS[SOP,S1], Page 6 line 676
2) SCNST : SETREP; (*set value if set constant*)
2) RCNST : real; (*real value if real constant*)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 7 line 85
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 7,7
1) TWOEXP : array [0..MAX_EXP_ON_COMP_MACH] of integer;
**** File 2) SOPG14.PAS[SOP,S1], Page 7 line 85
2) NULL_SET : SETREP; (*for empty-set comparison/assign.*) (*setch*)
2) WHICHPART : SETPART_INDEX; (*for getting a particular piece of a
2) constant set out of the set table*)(*setch*)
2) TWOEXP : array [0..MAX_EXP_ON_COMP_MACH] of integer;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 7 line 139
1) RPWORD : array [S1REGISTER] of (RSINGLE, R1STOFPAIR, R2NDOFPAIR); (*PBK*)
1) GISFREE : array [S1GBL] of boolean;
**** File 2) SOPG14.PAS[SOP,S1], Page 7 line 143
2) RPWORD : array [S1REGISTER] of
2) (RSINGLE, R1STOFPAIR, R2NDOFPAIR, R1STOFBLOCK, RINBLOCK);(*PBK*)(*PEG*)
2) GISFREE : array [S1GBL] of boolean;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 9 line 20
1) procedure PRINTSET (S : SETREP);
1) (*Print the set.*)
1) var I : 0..MAXSETEL;
1) COUNT : integer;
**** File 2) SOPG14.PAS[SOP,S1], Page 9 line 20
2) function SET_IN(SET_EL : SET_EL_TYP; PSET : SETREP) : boolean;
2) forward;
2) procedure PRINTSET (S : SETREP);
2) (*Print the set.*)
2) var I : SET_EL_TYP; (*setch*)
2) COUNT : integer;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 9 line 29
1) for i := 0 to MAXSETEL do
1) if I in S then
1) begin
1) if COUNT > 20 then
1) begin
1) WRITELN(OUTPUT);
1) WRITE (OUTPUT, ' ');
1) COUNT := 0;
1) end;
1) WRITE (OUTPUT, I : 3);
1) COUNT := COUNT + 1;
**** File 2) SOPG14.PAS[SOP,S1], Page 9 line 33
2) for I := 0 to SET_MAX do
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 9,9
2) if SET_IN(I,S) then (*setch*)
2) begin
2) if COUNT > 15 then (*setch*)
2) begin
2) WRITELN(OUTPUT);
2) WRITE (OUTPUT, ' ');
2) COUNT := 0;
2) end;
2) WRITE (OUTPUT, I : 4);
2) COUNT := COUNT + 1;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 9 line 84
1) PRINTSET (PCNST)
1) else if (DTYPE = TYPB) and (BREPRES = BJUMP) then
**** File 2) SOPG14.PAS[SOP,S1], Page 9 line 88
2) PRINTSET (SCNST)
2) else if (DTYPE = TYPB) and (BREPRES = BJUMP) then
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 10 line 1
1) (** S1WORD_PROCESSOR_CLASS: NEWCODEREC GETFIELD GETSIGNEDFIELD PUTFIELD **)
**** File 2) SOPG14.PAS[SOP,S1], Page 10 line 1
2) (** SETREP_PROCESSOR_CLASS: SET_IN SET_DIF SET_INT SET_UNI BUILD_SET *)(*setch*)
2) (**)
2) (*X10S1...*)
2) function SET_IN(*(SET_EL : SET_EL_TYP; PSET : SETREP) : boolean*);
2) (* SET_IN performs the function of the set IN operator for the structured
2) representation of large sets. Its first parameter is the scalar to be
2) tested for inclusion in the set, which is the second parameter. setch*)
2) var INDEX : SETREP_INDEX;
2) begin
2) INDEX := SET_EL div HOST_SET_SIZE; (*figure which real set to use*)
2) SET_EL := SET_EL mod HOST_SET_SIZE; (*figure correct offset*)
2) if SET_EL in PSET[INDEX] then
2) SET_IN := true
2) else
2) SET_IN := false;
2) end (*SET_IN*);
2) (* SET_DIF, SET_INT, and SET_UNI perform the functions of set difference,
2) intersection, and union, respectively, for the structured representation
2) of large sets. Note that their parameters A, B, and C correspond to the
2) construct A := B <setop> C . setch*)
2) procedure SET_DIF(var DESTSET : SETREP; OP1SET, OP2SET : SETREP); (*setch*)
2) var I : SETREP_INDEX;
2) begin
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 10,10
2) for I := 0 to SETREP_MAX do
2) DESTSET[I] := OP1SET[I] - OP2SET[I];
2) end (*SET_DIF*);
2) procedure SET_INT(var DESTSET : SETREP; OP1SET, OP2SET : SETREP); (*setch*)
2) var I : SETREP_INDEX;
2) begin
2) for I := 0 to SETREP_MAX do
2) DESTSET[I] := OP1SET[I] * OP2SET[I];
2) end (*SET_INT*);
2) procedure SET_UNI(var DESTSET : SETREP; OP1SET, OP2SET : SETREP); (*setch*)
2) var I : SETREP_INDEX;
2) begin
2) for I := 0 to SETREP_MAX do
2) DESTSET[I] := OP1SET[I] + OP2SET[I];
2) end (*SET_UNI*);
2) procedure BUILD_SET(var S : SETREP; SET_EL : SET_EL_TYP);
2) (*Add a scalar to a structured representation of a large set.*) (*setch*)
2) var INDEX: SETREP_INDEX;
2) begin
2) INDEX := SET_EL div HOST_SET_SIZE;
2) SET_EL := SET_EL mod HOST_SET_SIZE;
2) S[INDEX] := S[INDEX]+[SET_EL];
2) end (*BUILD_SET*);
2) (*...X10S1*)
2) "(*X10S1...*)
2) function SET_IN(*(SET_EL : SET_EL_TYP; PSET : SETREP) : boolean*);(*setch*)
2) begin
2) SET_IN := SET_EL in PSET
2) end (*SET_IN*);
2) procedure SET_DIF(var DESTSET : SETREP; OP1SET, OP2SET : SETREP); (*setch*)
2) begin
2) DESTSET := OP1SET - OP2SET
2) end (*SET_DIF*);
2) procedure SET_INT(var DESTSET : SETREP; OP1SET, OP2SET : SETREP); (*setch*)
2) begin
2) DESTSET := OP1SET * OP2SET
2) end (*SET_INT*);
2) procedure SET_UNI(var DESTSET : SETREP; OP1SET, OP2SET : SETREP); (*setch*)
2) begin
2) DESTSET := OP1SET + OP2SET
2) end (*SET_UNI*);
2) procedure BUILD_SET(var S : SETREP; SET_EL : SET_EL_TYP); (*setch*)
2) begin
2) S := S + [SET_EL]
2) end (*BUILD_SET*);
2) (*...X10S1*)"
2) (** S1WORD_PROCESSOR_CLASS: NEWCODEREC GETFIELD GETSIGNEDFIELD PUTFIELD **)
***************
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 10,10
**** File 1) SOPZ12.PAS[SOP,S1], Page 11 line 81
1) 1: (S: set of 0..MAXSETEL)
1) end;
**** File 2) SOPG14.PAS[SOP,S1], Page 12 line 81
2) 1: (S: HOST_SET_TYP) "*setch*"
2) end;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 11 line 86
1) 1: (S: set of 0..MAXSETEL; J: integer);
1) end;
**** File 2) SOPG14.PAS[SOP,S1], Page 12 line 86
2) 1: (S: HOST_SET_TYP; J: integer) "*setch*"
2) end;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 11 line 91
1) 1: (S: set of 0..MAXSETEL);
1) end;
1) N : 0..MAXSETEL;
1) begin
**** File 2) SOPG14.PAS[SOP,S1], Page 12 line 91
2) 1: (S: HOST_SET_TYP) "*setch*"
2) end;
2) N : HOST_SET_EL_TYP; "*setch*"
2) begin
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 11 line 137
1) 1: (S: set of 0..MAXSETEL); (*EJG*)
1) 2: (I2: integer; R2: real) (*EJG*)
1) end;
1) N : 0..MAXSETEL;
1) begin
**** File 2) SOPG14.PAS[SOP,S1], Page 12 line 137
2) 1: (S: HOST_SET_TYP); (*EJG*) (*setch*)
2) 2: (I2: integer; R2: real) (*EJG*)
2) end;
2) N : HOST_SET_EL_TYP; (*setch*)
2) begin
***************
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 11,12
**** File 1) SOPZ12.PAS[SOP,S1], Page 11 line 202
1) procedure SETREP_TO_S1WORDS (var W1, W2 : S1WORD; SVAL : SETREP);
1) (*Translate a set value to a pair of S1WORDs.
1) When MAXSETEL increases this will still work, but it
1) would be faster to equivalence a set to two integers.*)
1) var N : 0..MAXSETEL;
1) begin
1) W1 := ZEROS1WORD;
1) W2 := ZEROS1WORD;
1) for N := MAXSETEL downto WORDBITS do
1) if N in SVAL then
1) PUTFIELD (W1, 2*WORDBITS-1-N, 1, 1);
1) for N := WORDBITS-1 downto 0 do
1) if N in SVAL then
1) PUTFIELD (W2, WORDBITS-1-N, 1, 1);
1) end (*SETREP_TO_S1WORDS*);
**** File 2) SOPG14.PAS[SOP,S1], Page 12 line 202
2) procedure SETREP_TO_S1WORDS (var S1SET : S1SETREP; SVAL : SETREP);
2) (*Translate a set value to the S1's set representation.
2) Note that SET_MAX = S1SETREP_SIZE*WORDBITS - 1.*)
2) (*Would it be faster to equivalence a set to integers?*)
2) var INDEX : S1SETREP_INDEX; (*setch...*)
2) N, TMP1, TMP2 : SET_EL_TYP;
2) begin
2) for INDEX := 0 to S1SETREP_MAX do
2) begin
2) S1SET[INDEX] := ZEROS1WORD;
2) TMP1 := (S1SETREP_MAX + 1 - INDEX)*WORDBITS - 1;
2) TMP2 := (S1SETREP_MAX - INDEX)*WORDBITS;
2) for N := TMP1 downto TMP2 do
2) if SET_IN(N, SVAL) then
2) PUTFIELD(S1SET[INDEX], TMP1 - N, 1, 1);
2) end; (*...setch*)
2) end (*SETREP_TO_S1WORDS*);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 16 line 47
1) FIXJOP(JUMPLOC,JL.FIRST);
**** File 2) SOPG14.PAS[SOP,S1], Page 17 line 47
2) if not (OPFORMAT[GETS1OPCODE(JUMPLOC)] = VJOP) then (*PEG*)
2) ASSERTFAIL('ADD_JUMP_001'); (*PEG*)
2) FIXJOP(JUMPLOC,JL.FIRST);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 17 line 10
1) (*Note - this procedure is never used.*)
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 17,18
1) begin
**** File 2) SOPG14.PAS[SOP,S1], Page 18 line 11
2) begin
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 18 line 1
1) (** OPERAND_PROCESSOR_CLASS: EXTENDED_IMM_OPERAND REGDISP_OPERAND EXTENDED_REGDISP_OPERAND EXT_REGADDR_OPERAND ADDR_OPERAND **)
1) (**)
**** File 2) SOPG14.PAS[SOP,S1], Page 19 line 1
2) (** OPERAND_PROCESSOR_CLASS: EXTENDED_IMM_OPERAND REGDISP_OPERAND EXTENDED_REGDISP_OPERAND EXT_REGADDR_OPERAND ADDR_OPERAND TWIDDLE_OPERAND **)
2) (**)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 19 line 1
1) (** REGISTER/GLOBAL_MANAGEMENT_CLASS: ALLOCGBL FREEGBL_S ALLOCRG ALLOCRP FREERG_S FINDRP FINDRG MOVE_AND_FREE_RTB CURRENT_PARMREG_COUNT IS_PARMREG CHECK_DSP_TMP_COLLISION RESERVE_PARMREGS **)
1) (**)
**** File 2) SOPG14.PAS[SOP,S1], Page 19 line 107
2) procedure TWIDDLE_OPERAND (var OPND : OPERAND; TWIDDLE : integer);
2) (*Change OPND to specify a location TWIDDLE quarterwords
2) from where it does now, if that is possible.*)(*peg 16MAY79*)
2) begin
2) if TWIDDLE <> 0 then
2) if ISREG(OPND) then
2) if not (TWIDDLE mod WORDUNITS = 0) then ASSERTFAIL('TWIDDLE_O001')
2) else if not ((ord(FIRSTS1REG) <= OPND.F + (TWIDDLE div WORDUNITS))
2) and (OPND.F + (TWIDDLE div WORDUNITS) <= ord(LASTS1REG)))
2) then ASSERTFAIL('TWIDDLE_O002')
2) else OPND.F := OPND.F + (TWIDDLE div WORDUNITS)
2) else if (OPND.X = 0) (*Short-indexed*)
2) and ((ord(S1RPC) <= OPND.REG) and (OPND.REG <= ord(LASTS1REG))) then
2) if FITS_SHRT_OFFSET(OPND.F*WORDUNITS + TWIDDLE) then
2) OPND.F := OPND.F + (TWIDDLE div WORDUNITS)
2) else
2) begin (*Convert to extended*)
2) OPND.X := 1;
2) OPND.XW.FMT := XW_EV;
2) OPND.XW.P := 0;
2) OPND.XW.V := 1;
2) OPND.XW.D := 0;
2) OPND.XW.I := 0;
2) OPND.XW.S := 0;
2) OPND.XW.REG := OPND.REG;
2) OPND.XW.DISP := OPND.F*WORDUNITS + TWIDDLE;
2) OPND.REG := 1;
2) OPND.F := 0;
2) end (*Convert to extended*)
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 19,19
2) else if (OPND.X = 1) and (OPND.XW.I <> 1) then (*Extended addressing*)
2) begin
2) if OPND.XW.V = 0 then (*Fixed-based*)
2) OPND.XW.ADDR := OPND.XW.ADDR + TWIDDLE
2) else if OPND.XW.V = 1 then (*Variable-based*)
2) OPND.XW.DISP := OPND.XW.DISP + TWIDDLE
2) end (*Extended addressing*)
2) else if not (false) then ASSERTFAIL('TWIDDLE_O003'); (*All others*)
2) end (*TWIDDLE_OPERAND*);
2) (** REGISTER/GLOBAL_MANAGEMENT_CLASS: ALLOCGBL FREEGBL_S ALLAREFREE ALLOCRG ALLOCRP FREERG_S FINDRGBLOCK FINDRP FINDRG MOVE_AND_FREE_RTB CURRENT_PARMREG_COUNT IS_PARMREG CHECK_DSP_TMP_COLLISION RESERVE_PARMREGS **)
2) (**)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 19 line 31
1) procedure ALLOCRG (R : S1REGISTER);
**** File 2) SOPG14.PAS[SOP,S1], Page 20 line 31
2) function ALLAREFREE(FIRSTRG, SIZE : S1REGISTER) : boolean; (*PEG 14MAY79...*)
2) (*Checks to see if all registers in the block starting at FIRSTRG of
2) length SIZE are free.*)
2) var FREE : boolean;
2) I : S1REGISTER;
2) begin
2) FREE := RISFREE[FIRSTRG];
2) I := FIRSTRG + 1;
2) while FREE and (I <= FIRSTRG + SIZE - 1) do
2) begin
2) FREE := (*FREE and*) RISFREE[I];
2) I := I + 1;
2) end;
2) ALLAREFREE := FREE;
2) end (*ALLAREFREE*); (*...PEG 14MAY79*)
2) procedure ALLOCRG (R : S1REGISTER);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 19 line 63
1) end (* if RPWORD[R] = R1STOFPAIR then *); (*PBK*)
1) end (*FREERG_S*);
1) procedure FINDRP;
1) (*Find and allocate a pair of temporary registers (Not RTA or RTB).
1) Return the smaller reg number in global variable NXTRG.*)
1) begin
1) NXTRG := MINTMPS1REG;
1) while (NXTRG < MINDSPS1REG-2)
1) and not (RISFREE[NXTRG] and RISFREE[NXTRG+1]) do
1) NXTRG := NXTRG + 1;
1) if RISFREE[NXTRG] and RISFREE[NXTRG+1] then
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 19,20
1) begin
1) RISFREE[NXTRG] := false;
1) RISFREE[NXTRG+1] := false;
1) RPWORD[NXTRG] := R1STOFPAIR; (*PBK*)
1) RPWORD[NXTRG+1] := R2NDOFPAIR; (*PBK*)
1) if NXTRG+1 > MAXTMPS1REG then
1) begin
1) MAXTMPS1REG := NXTRG+1;
1) MAXTMPPROC := CURPROC;
**** File 2) SOPG14.PAS[SOP,S1], Page 20 line 82
2) end (* if RPWORD[R] = R1STOFPAIR then *) (*PBK*)
2) else if RPWORD[R] = R1STOFBLOCK then (*PEG 14MAY79...*)
2) begin
2) R := R + 1;
2) while RPWORD[R] = RINBLOCK do
2) begin
2) RISFREE[R] := true;
2) EMITFAKEINST(XFREEREG,R);
2) R := R + 1;
2) end;
2) end (*if RPWORD[R] = R1STOFBLOCK*); (*...PEG 14MAY79*)
2) end (*FREERG_S*);
2) procedure FINDRGBLOCK(SIZE : S1REGISTER); (*PEG 14MAY79...*)
2) (*Find and allocate a block of temporary registers (Not RTA or RTB) of
2) length SIZE. Return the smallest reg number in global variable NXTRG.*)
2) (**** NOTE: THIS IS A TEMPORARY VERSION OF THIS ROUTINE. EVENTUALLY IT
2) WILL BE MUCH SMARTER. PEG. ****)
2) var I : S1REGISTER;
2) begin
2) NXTRG := MINTMPS1REG;
2) while (NXTRG < MINDSPS1REG - SIZE)
2) and not ALLAREFREE(NXTRG, SIZE) do
2) NXTRG := NXTRG + 1;
2) if ALLAREFREE(NXTRG, SIZE) then
2) begin
2) RISFREE[NXTRG] := false;
2) RPWORD[NXTRG] := R1STOFBLOCK;
2) for I := (NXTRG + 1) to (NXTRG + SIZE - 1) do
2) begin
2) RISFREE[I] := false;
2) RPWORD[I] := RINBLOCK;
2) end;
2) if (NXTRG + SIZE - 1) > MAXTMPS1REG then
2) begin
2) MAXTMPS1REG := NXTRG + SIZE - 1;
2) MAXTMPPROC := CURPROC;
***************
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 19,20
**** File 1) SOPZ12.PAS[SOP,S1], Page 19 line 90
1) end (*FINDRP*);
**** File 2) SOPG14.PAS[SOP,S1], Page 20 line 126
2) end (*FINDRGBLOCK*); (*...PEG 14MAY79*)
2) procedure FINDRP;
2) (*Find and allocate a pair of temporary registers (Not RTA or RTB).
2) Return the smaller reg number in global variable NXTRG.*)
2) begin
2) NXTRG := MINTMPS1REG;
2) while (NXTRG < MINDSPS1REG-2)
2) and not (RISFREE[NXTRG] and RISFREE[NXTRG+1]) do
2) NXTRG := NXTRG + 1;
2) if RISFREE[NXTRG] and RISFREE[NXTRG+1] then
2) begin
2) RISFREE[NXTRG] := false;
2) RISFREE[NXTRG+1] := false;
2) RPWORD[NXTRG] := R1STOFPAIR; (*PBK*)
2) RPWORD[NXTRG+1] := R2NDOFPAIR; (*PBK*)
2) if NXTRG+1 > MAXTMPS1REG then
2) begin
2) MAXTMPS1REG := NXTRG+1;
2) MAXTMPPROC := CURPROC;
2) MAXTMPPLOC := CURPLOC
2) end
2) end
2) else ERROR(WEXPR_TOO_COMPLEX)
2) end (*FINDRP*);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 20 line 30
1) procedure FREEREGSBUTONE (STE : STKINX; R : S1REGISTER);
1) (*Free all the temp expr regs used in the datum,
1) *except* do not free register R if it is used.*)
1) begin
1) if (STK[STE].FPA.WHICH=RGS) then
1) if STK[STE].FPA.RGADR <> R then
1) if (MINTMPS1REG<=STK[STE].FPA.RGADR) and
1) (STK[STE].FPA.RGADR<=MAXTMPS1REG) or
1) (STK[STE].FPA.RGADR in [S1RTA, S1RTB]) then
1) FREERG_S (STK[STE].FPA.RGADR);
1) if STK[STE].NVPAS >= 1 then
1) if (STK[STE].VPA1.VPA.WHICH=RGS) then
1) if STK[STE].VPA1.VPA.RGADR <> R then
1) if (MINTMPS1REG<=STK[STE].VPA1.VPA.RGADR) and
1) (STK[STE].VPA1.VPA.RGADR<=MAXTMPS1REG) or
1) (STK[STE].VPA1.VPA.RGADR in [S1RTA, S1RTB]) then
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 20,21
1) FREERG_S(STK[STE].VPA1.VPA.RGADR);
1) if STK[STE].NVPAS = 2 then
1) if (STK[STE].VPA2.VPA.WHICH=RGS) then
1) if STK[STE].VPA2.VPA.RGADR <> R then
1) if (MINTMPS1REG<=STK[STE].VPA2.VPA.RGADR) and
1) (STK[STE].VPA2.VPA.RGADR<=MAXTMPS1REG) or
1) (STK[STE].VPA2.VPA.RGADR in [S1RTA, S1RTB]) then
1) FREERG_S (STK[STE].VPA2.VPA.RGADR);
1) end (*FREEREGSBUTONE*);
1) procedure FREERGSBUTSOME (STE, STE2 : STKINX);
1) (*Free all temp expr regs used in STK[STE], *except*
1) do not free any used in STK[STE2]. *)
1) (*NOTE - This procedure is never used.*)
1) var DONTFREE : set of S1REGISTER;
**** File 2) SOPG14.PAS[SOP,S1], Page 21 line 30
2) procedure FREEREGSBUTTHESE (STE : STKINX; REGS : SETOFS1REGS);
2) (*Free all the temp expr regs used in the datum,
2) *except* do not free registers in REGS if used.*)(*PEG*)
2) begin
2) with STK[STE] do
2) begin
2) if (FPA.WHICH=RGS) then
2) if not (FPA.RGADR in REGS) then
2) if (MINTMPS1REG<=FPA.RGADR) and
2) (FPA.RGADR<=MAXTMPS1REG) or
2) (FPA.RGADR in [S1RTA, S1RTB]) then
2) FREERG_S (FPA.RGADR);
2) if NVPAS >= 1 then
2) if (VPA1.VPA.WHICH=RGS) then
2) if not (VPA1.VPA.RGADR in REGS) then
2) if (MINTMPS1REG<=VPA1.VPA.RGADR) and
2) (VPA1.VPA.RGADR<=MAXTMPS1REG) or
2) (VPA1.VPA.RGADR in [S1RTA, S1RTB]) then
2) FREERG_S(VPA1.VPA.RGADR);
2) if NVPAS = 2 then
2) if (VPA2.VPA.WHICH=RGS) then
2) if not (VPA2.VPA.RGADR in REGS) then
2) if (MINTMPS1REG<=VPA2.VPA.RGADR) and
2) (VPA2.VPA.RGADR<=MAXTMPS1REG) or
2) (VPA2.VPA.RGADR in [S1RTA, S1RTB]) then
2) FREERG_S (VPA2.VPA.RGADR);
2) end (*with STK[STE]*)
2) end (*FREEREGSBUTTHESE*);
2) (*NOTE - This procedure is never used. If it is used in the future, it
2) should be carefully checked for discrepencies (in other words,
2) it is not guaranteed to have been maintained)....
2) procedure FREERGSBUTSOME (STE, STE2 : STKINX);
2) "*Free all temp expr regs used in STK[STE], *except*
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 20,21
2) do not free any used in STK[STE2]. *"
2) var DONTFREE : set of S1REGISTER;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 20 line 94
1) end (*FREERGSBUTSOME*);
1) procedure FREEVPAREG (var V : VPAREC);
**** File 2) SOPG14.PAS[SOP,S1], Page 21 line 100
2) end "*FREERGSBUTSOME*";
2) ...end of unused procedure.*)
2) procedure FREEVPAREG (var V : VPAREC);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 24 line 1
1) (** DATUM_PROCESSOR_CLASS: REG_DATUM COERCE_DATUM COERCE_TWO_DATUMS DATUM_ISFREE_REG DATUM_IS_REG DATUM_IS_T_REG DATUM_IS_FILADR LOADSTACKEXCEPT BJUMP_TO_BINTVAL INCREMENT_DATUM **)
1) (**)
**** File 2) SOPG14.PAS[SOP,S1], Page 25 line 1
2) (** DATUM_PROCESSOR_CLASS: REG_DATUM COERCE_DATUM COERCE_TWO_DATUMS DATUM_ISFREE_REG DATUM_IS_REG DATUM_IS_T_REG DATUM_IS_FILADR XCHANGE_STKENTS LOADSTACKEXCEPT BJUMP_TO_BINTVAL INCREMENT_DATUM **)
2) (**)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 24 line 180
1) procedure LOADSTACKEXCEPT (BOTEXC, TOPEXC : STKINX);
**** File 2) SOPG14.PAS[SOP,S1], Page 25 line 180
2) procedure XCHANGE_STKENTS (STE1, STE2 : STKINX); (*peg 15MAY79*)
2) (*Exchange the datum at STK[STE1] with that at STK[STE2].*)
2) var T_DATUM : DATUM;
2) begin
2) T_DATUM := STK[STE1];
2) STK[STE1] := STK[STE2];
2) STK[STE2] := T_DATUM;
2) end (*XCHANGE_STKENTS*);
2)
2) procedure LOADSTACKEXCEPT (BOTEXC, TOPEXC : STKINX);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 24 line 343
1) FREEREGSBUTONE (STE, DEST);
1) REG_DATUM (STE, CODESTART, TYPD, DEST);
**** File 2) SOPG14.PAS[SOP,S1], Page 25 line 355
2) FREEREGSBUTTHESE (STE, [DEST]);
2) REG_DATUM (STE, CODESTART, TYPD, DEST);
***************
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 24,25
**** File 1) SOPZ12.PAS[SOP,S1], Page 24 line 369
1) FREEREGSBUTONE (STE, DEST);
1) REG_DATUM (STE, CODESTART, DTYPE, DEST);
**** File 2) SOPG14.PAS[SOP,S1], Page 25 line 381
2) FREEREGSBUTTHESE (STE, [DEST]);
2) REG_DATUM (STE, CODESTART, DTYPE, DEST);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 27 line 34
1) procedure UPD_SETTBL (var DISP : S1DISP; SVAL : SETREP);
1) (*Add the set to the set table if not already there. Return
1) its table displacement in DISP.*)
1) var FOUND : boolean;
1) PTR : A_CODEREC;
1) W1, W2 : S1WORD;
1) begin
**** File 2) SOPG14.PAS[SOP,S1], Page 28 line 34
2) procedure UPD_SETTBL (var DISP : S1DISP; SVAL : SETREP);
2) (*Add the entire set to the set table if not already there.*)
2) var FOUND : boolean;
2) PTR : A_CODEREC; (*setch...*)
2) CNT : 0..S1SETREP_SIZE;
2) INDEX : S1SETREP_INDEX;
2) S1SET : S1SETREP; (*...setch*)
2) begin
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 27 line 46
1) SETREP_TO_S1WORDS (W1, W2, SVAL);
1) while not FOUND and (PTR <> nil) do
1) if (PTR↑.CODEWORD = W1) and (PTR↑.NEXTPTR↑.CODEWORD = W2) then
1) FOUND := true
1) else
1) begin
1) PTR := PTR↑.NEXTPTR↑.NEXTPTR;
1) DISP := DISP + 2*WORDUNITS;
1) end;
1) if not FOUND then
1) begin
1) EMIT_S1WORD (SETTBL, W1);
1) EMIT_S1WORD (SETTBL, W2);
1) end;
1) end (*UPD_SETTBL*);
**** File 2) SOPG14.PAS[SOP,S1], Page 28 line 47
2) SETREP_TO_S1WORDS (S1SET, SVAL); (*setch*)
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 27,28
2) while not FOUND and (PTR <> nil) do
2) begin (*setch...*)
2) CNT := 0;
2) for INDEX := 0 to S1SETREP_MAX do
2) begin
2) if PTR↑.CODEWORD = S1SET[INDEX] then CNT := CNT + 1;
2) PTR := PTR↑.NEXTPTR;
2) end;
2) if CNT = S1SETREP_SIZE then FOUND := true
2) else DISP := DISP + S1SETREP_SIZE*WORDUNITS;
2) end (*while*);
2) if not FOUND then
2) for INDEX := 0 to S1SETREP_MAX do
2) EMIT_S1WORD(SETTBL, S1SET[INDEX]); (*...setch*)
2) end (*UPD_SETTBL*);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 29 line 121
1) UPD_SETTBL (OPND.XW.DISP, PCNST);
1) end (*TYPS*)
**** File 2) SOPG14.PAS[SOP,S1], Page 30 line 121
2) UPD_SETTBL (OPND.XW.DISP, SCNST);
2) end (*TYPS*)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 31 line 20
1) end (*GET_OPERAND*);
**** File 2) SOPG14.PAS[SOP,S1], Page 32 line 20
2) if STK[STE].DTYPE = TYPS then (*setch*)
2) TWIDDLE_OPERAND(OPND, WHICHPART*DOUBLEWORDUNITS);(*setch*)
2) end (*GET_OPERAND*);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 33 line 121
1) FREEREGSBUTONE (TOP, DEST);
1) POPTOP;
1) FREEREGSBUTONE (TOP, DEST);
1) REG_DATUM (TOP, STK[TOP].CODESTART, RESTYPE, DEST);
**** File 2) SOPG14.PAS[SOP,S1], Page 34 line 121
2) FREEREGSBUTTHESE (TOP, [DEST]);
2) POPTOP;
2) FREEREGSBUTTHESE (TOP, [DEST]);
2) REG_DATUM (TOP, STK[TOP].CODESTART, RESTYPE, DEST);
***************
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 33,34
**** File 1) SOPZ12.PAS[SOP,S1], Page 44 line 20
1) DEST, OP1RG, OP2RG : S1REGISTER;
1) OP1GBL : S1GBL;
**** File 2) SOPG14.PAS[SOP,S1], Page 45 line 20
2) DEST, OP1RG, OP2RG, OPRRG : S1REGISTER;
2) DESTREGS : SETOFS1REGS; (*PEG*)
2) OP1GBL : S1GBL;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 44 line 34
1) PREG : 0..MAXPAREG;
**** File 2) SOPG14.PAS[SOP,S1], Page 45 line 35
2) INDEX : SETPART_INDEX; (*setch*)
2) PREG : 0..MAXPAREG;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 44 line 116
1) FREEREGSBUTONE(TOP,DEST);
1) REG_DATUM(TOP,CODESTART,RESTYPE,DEST)
**** File 2) SOPG14.PAS[SOP,S1], Page 45 line 118
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) REG_DATUM(TOP,CODESTART,RESTYPE,DEST)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 45 line 77
1) FREEREGSBUTONE (TOP, DEST);
1) REG_DATUM (TOP, CODESTART, TYPB, DEST);
**** File 2) SOPG14.PAS[SOP,S1], Page 46 line 77
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) REG_DATUM (TOP, CODESTART, TYPB, DEST);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 45 line 101
1) FREEREGSBUTONE (TOP, DEST);
1) POPTOP;
1) FREEREGSBUTONE (TOP, DEST);
1) with STK[TOP] do
**** File 2) SOPG14.PAS[SOP,S1], Page 46 line 101
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) POPTOP;
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) with STK[TOP] do
***************
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 45,46
**** File 1) SOPZ12.PAS[SOP,S1], Page 45 line 124
1) FREEREGSBUTONE (TOP, DEST);
1) POPTOP;
1) FREEREGSBUTONE (TOP, DEST);
1) REG_DATUM (TOP, RESCODESTART, TYPD, DEST);
**** File 2) SOPG14.PAS[SOP,S1], Page 46 line 124
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) POPTOP;
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) REG_DATUM (TOP, RESCODESTART, TYPD, DEST);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 45 line 222
1) FREEREGSBUTONE (TOP, DEST);
1) POPTOP;
1) FREEREGSBUTONE (TOP, DEST);
1) REG_DATUM (TOP, RESCODESTART, TYPI, DEST);
**** File 2) SOPG14.PAS[SOP,S1], Page 46 line 222
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) POPTOP;
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) REG_DATUM (TOP, RESCODESTART, TYPI, DEST);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 46 line 20
1) FREEREGSBUTONE (TOP, DEST);
1) POPTOP;
1) FREEREGSBUTONE (TOP, DEST);
1) REG_DATUM (TOP, RESCODESTART, TYPD, DEST);
**** File 2) SOPG14.PAS[SOP,S1], Page 47 line 20
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) POPTOP;
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) REG_DATUM (TOP, RESCODESTART, TYPD, DEST);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 46 line 111
1) FREEREGSBUTONE (TOP, DEST);
1) POPTOP;
1) FREEREGSBUTONE (TOP, DEST);
1) REG_DATUM (TOP, RESCODESTART, TYPI, DEST);
**** File 2) SOPG14.PAS[SOP,S1], Page 47 line 111
2) FREEREGSBUTTHESE(TOP, [DEST]);
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 46,47
2) POPTOP;
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) REG_DATUM (TOP, RESCODESTART, TYPI, DEST);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 46 line 175
1) FREEREGSBUTONE(TOP,DEST); POPTOP; FREEREGSBUTONE(TOP,DEST);
1) REG_DATUM(TOP,RESCODESTART,RESTYPE,DEST)
**** File 2) SOPG14.PAS[SOP,S1], Page 47 line 175
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) POPTOP;
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) REG_DATUM(TOP,RESCODESTART,RESTYPE,DEST)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 47 line 1
1) (** ASMNXTINNT_CLASS: CASE4 CASE5 **)
1) (**)
1) procedure CASE4;
**** File 2) SOPG14.PAS[SOP,S1], Page 48 line 1
2) (** ASMNXTINNT_CLASS: COMPARE_SETS CASE4 CASE5 **)
2) (**)
2) procedure COMPARE_SETS; (*peg 15MAY79...*)
2) (*Do the comparisons PEQU, PNEQ, PGEQ, and PLEQ for TYPS operands.
2) GEQ is "optimized" to an LEQ with the operands reversed
2) (GEQ and LEQ are the set inclusion operators; LEQ is thus
2) implemented as an AND RSET,SET1,SET2 followed by
2) EQU BOOL,RSET,SET2).*)
2) var BOOL : boolean;
2) begin
2) if (STK[TOP-1].DTYPE <> TYPS) or (STK[TOP].DTYPE <> TYPS) then
2) ERROR (WCOMPARE_ILLEGAL)
2) else if not (OPC in [PEQU, PNEQ, PGEQ, PLEQ]) then
2) ERROR (WWRONG_COMPARE)
2) else
2) begin (*setch...*)
2) if IS_CONSTANT(TOP-1) and IS_CONSTANT(TOP)
2) and (OPC in [PEQU, PNEQ]) then
2) begin
2) if OPC = PEQU then
2) BOOL := STK[TOP-1].SCNST = STK[TOP].SCNST
2) else if OPC = PNEQ then
2) BOOL := STK[TOP-1].SCNST <> STK[TOP].SCNST
2) else if not (false) then ASSERTFAIL('COMPARE_S001');
2) POPTOP; STK[TOP] := ZERODATUM;
2) with STK[TOP] do
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 47,48
2) begin
2) DTYPE := TYPB;
2) BREPRES := BINTVAL;
2) FPA.WHICH := MEM;
2) FPA.MEMADR.LVL := 0;
2) FPA.MEMADR.DSPLMT := ord(BOOL);
2) end (*with STK[TOP] do*);
2) end (*if constants*)
2) else
2) begin (*not constant*)
2) LOADSTACKEXCEPT(TOP-1, TOP);
2) RESCODESTART := STK[TOP-1].CODESTART;
2) TMPJUMPLIST := EMPTYJUMPLIST;
2) if OPC = PGEQ then
2) begin
2) XCHANGE_STKENTS(TOP, TOP-1);
2) OPC := PLEQ;
2) end;
2) if OPC = PLEQ then
2) begin
2) FINDRGBLOCK(NUMOFSETPARTS*2);
2) DEST := NXTRG;
2) for I := 0 to (1 + SETPART_MAX*2) do
2) DESTREGS := DESTREGS + [DEST + I];
2) if not RISFREE[S1RTB] then MOVE_AND_FREE_RTB;
2) ALLOCRP(S1RTB);
2) for INDEX := 0 to SETPART_MAX do
2) begin
2) WHICHPART := INDEX;
2) GET_OPERAND(OPND1,TOP-1);
2) GET_OPERAND(OPND2,TOP);
2) EMITTOP(XAND_D, 3, OPND1, OPND2); (*Result ==> RTB*)
2) REG_OPERAND(OPNDR, DEST + INDEX*2);
2) EMITXOP(XMOVMS_2, OPNDR, OPNDRTB);
2) end;
2) WHICHPART := 0;
2) FREERG_S(S1RTB);
2) FREEREGSBUTTHESE(TOP-1,DESTREGS);
2) REG_DATUM(TOP-1, STK[TOP-1].CODESTART, TYPS, DEST);
2) end (*if OPC = PLEQ*);
2) if not RISFREE[S1RTB] and (RTBUSER < TOP-1) then
2) MOVE_AND_FREE_RTB;
2) for INDEX := 0 to SETPART_MAX do
2) begin
2) WHICHPART := INDEX;
2) GET_OPERAND(OPND1,TOP-1);
2) GET_OPERAND(OPND2,TOP);
2) SKIPLOC := NEWINSTREC;
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 47,48
2) EMITSOP (XSKP_EQL_D, 0, OPND1, OPND2, nil);
2) JUMPLOC := NEWINSTREC;
2) EMITJOP (XJMPA, 0, UNUSED_OP, ZERO_OP, nil);
2) if INDEX < SETPART_MAX then
2) ADD_JUMP_TO_JUMPLIST(TMPJUMPLIST, JUMPLOC);
2) FIXSOP (SKIPLOC, NEWINSTREC);
2) end;
2) WHICHPART := 0;
2) FREEDATUMREGS(TOP-1);
2) FREEDATUMREGS(TOP);
2) POPTOP;
2) STK[TOP] := ZERODATUM;
2) with STK[TOP] do
2) begin
2) CODESTART := RESCODESTART;
2) DTYPE := TYPB;
2) BREPRES := BJUMP;
2) NVPAS := 1; (*to make it not look
2) like a constant. Not needed?*)
2) FINDRG;
2) VPA1.VPA.WHICH := RGS;
2) VPA1.VPA.RGADR := NXTRG;
2) (*where it will go if it becomes bintval*)
2) if OPC = PNEQ then
2) begin
2) BFALSELIST := EMPTYJUMPLIST;
2) BTRUELIST := TMPJUMPLIST;
2) BJUMPON := true;
2) end
2) else (*OPC in [PEQU, PLEQ, PGEQ]*)
2) begin
2) BFALSELIST := TMPJUMPLIST;
2) BTRUELIST := EMPTYJUMPLIST;
2) BJUMPON := false;
2) end;
2) BFALLTHRUSKIPLOC := SKIPLOC;
2) end (*with STK[TOP] do*);
2) end (*not constant*)
2) end (*...setch*)
2) end (*COMPARE_SETS*); (*...peg 15MAY79*)
2) procedure CASE4;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 47 line 40
1) FREEREGSBUTONE(TOP,DEST); POPTOP; FREEREGSBUTONE(TOP,DEST);
1) REG_DATUM(TOP,RESCODESTART,RESTYPE,DEST)
**** File 2) SOPG14.PAS[SOP,S1], Page 48 line 166
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 47,48
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) POPTOP;
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) REG_DATUM(TOP,RESCODESTART,RESTYPE,DEST)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 47 line 49
1) RESCODESTART := STK[TOP-1].CODESTART;
1) if TYP <> TYPM then
1) begin
1) RESTYPE := COMPARE_COERCE_TYPE
1) [STK[TOP-1].DTYPE, STK[TOP].DTYPE];
1) if RESTYPE = ILLCOMP then
1) ERROR (WCOMPARE_ILLEGAL)
1) else if RESTYPE <> TYP then
1) ERROR (WWRONG_COMPARE);
1) COERCE_DATUM (TOP-1, RESTYPE);
1) COERCE_DATUM (TOP, RESTYPE);
1) if (RESTYPE in [TYPA, TYPI]) and
1) (STK[TOP-1].FINALIND=IND0) and (STK[TOP].FINALIND=IND0) then
1) begin (*Bring constant parts to one side.*)
1) if not ((STK[TOP-1].FPA.WHICH = MEM) and
1) (STK[TOP].FPA.WHICH = MEM)) then
1) ASSERTFAIL('PEQU,PNEQ001');
1) STK[TOP].FPA.MEMADR.DSPLMT := STK[TOP].FPA.MEMADR.DSPLMT
1) - STK[TOP-1].FPA.MEMADR.DSPLMT;
1) STK[TOP-1].FPA.MEMADR.DSPLMT := 0;
1) end (*Bring constant parts to one side.*);
1) if RESTYPE = TYPB then
1) begin
1) if STK[TOP-1].BREPRES = BJUMP then
1) BJUMP_TO_BINTVAL (TOP-1);
1) if STK[TOP].BREPRES = BJUMP then
1) BJUMP_TO_BINTVAL (TOP);
1) (*Note : <=,>=,<,> could be optimized as and, or are.*)
1) end;
1) S1OP := COMPARE_OP[S1SIZE[RESTYPE], OPC];
1) GET_OPERAND (OPND1, TOP-1);
1) GET_OPERAND (OPND2, TOP);
1) LOADSTACKEXCEPT (TOP-1, TOP);
1) if not RISFREE[S1RTB] and (RTBUSER < TOP-1) then
1) MOVE_AND_FREE_RTB;
1) FREEDATUMREGS (TOP);
1) POPTOP;
1) FREEDATUMREGS (TOP);
1) end (*TYP <> TYPM*)
1) else
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 47,48
1) begin (*TYP = TYPM*)
1) if not(STK[TOP-1].DTYPE in [TYPA, TYPM]) or
1) not(STK[TOP].DTYPE in [TYPA, TYPM]) then
1) ERROR (WCOMPM_NEEDS_ADDR);
1) (* make sure the zero and CPLPL global are free (to prevent errors) *)
1) ALLOCGBL (S1GBLZ);
1) OP1GBL := S1GCPLPL;
1) ALLOCGBL (OP1GBL);
1) OP1GBL := succ(OP1GBL);
1) ALLOCGBL (OP1GBL);
1) OP1GBL := succ(OP1GBL);
1) ALLOCGBL (OP1GBL);
1) OP1GBL := succ(OP1GBL);
1) ALLOCGBL (OP1GBL);
1) OP1GBL := succ(OP1GBL);
1) ALLOCGBL (OP1GBL);
1) (* initialize the global zero *)
1) OP1GBL := S1GBLZ;
1) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
1) EMITXOP (XMOV_S_S, OPND1, ZERO_OP);
1) (* initialize the CPLPL block-descriptor *)
1) OP1GBL := S1GCPLPL;
1) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
1) IMM_OPERAND (OPND2, S1GBLZ*WORDUNITS);
1) EMITXOP (XMOV_S_S, OPND1, OPND2);
1) OP1GBL := succ(OP1GBL);
1) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
1) MOVE_QUANTITY (OPND1, TOP-1);
1) OP1GBL := succ(OP1GBL);
1) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
1) IMM_OPERAND (OPND2, I1);
1) EMITXOP (XMOV_S_S, OPND1, OPND2);
1) OP1GBL := succ(OP1GBL);
1) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
1) MOVE_QUANTITY (OPND1, TOP);
1) OP1GBL := succ(OP1GBL);
1) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
1) IMM_OPERAND (OPND2, I1);
1) EMITXOP (XMOV_S_S, OPND1, OPND2);
1) (* emit the BLKCMP and subsequent flag test *)
1) ADDR_OPERAND (OPND2, S1GCPLPL*WORDUNITS); (*LCW*)
1) FREEDATUMREGS(TOP); (*EJG 16JAN79*)
1) FREEDATUMREGS(TOP-1); (*EJG 16JAN79*)
1) FINDRG;
1) OP1RG := NXTRG;
1) REG_OPERAND (OPND1, OP1RG);
1) EMITXOP (BLKCMP_X_Q[OPC], OPND1, OPND2);
1) DEST := OP1RG;
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 47,48
1) LOADSTACKEXCEPT (TOP-1, TOP);
1) POPTOP;
1) REG_OPERAND (OPND1, DEST);
1) IMM_OPERAND (OPND2, S1TRUEFLAG);
1) S1OP := XSKP_EQL_S;
1) if not RISFREE[S1RTB] then MOVE_AND_FREE_RTB;
1) FREERG_S (DEST);
1) (* free the global zero and CPLPL global *)
1) FREEGBL_S (S1GBLZ);
1) OP1GBL := S1GCPLPL;
1) FREEGBL_S (OP1GBL);
1) OP1GBL := succ(OP1GBL);
1) FREEGBL_S (OP1GBL);
1) OP1GBL := succ(OP1GBL);
1) FREEGBL_S (OP1GBL);
1) OP1GBL := succ(OP1GBL);
1) FREEGBL_S (OP1GBL);
1) OP1GBL := succ(OP1GBL);
1) FREEGBL_S (OP1GBL);
1) end (*TYPM*);
1) SKIPLOC := NEWINSTREC;
1) EMITSOP (S1OP, 0, OPND1, OPND2, nil);
1) EMITJOP (XJMPA, 0, UNUSED_OP, ZERO_OP, nil);
1) FIXSOP (SKIPLOC, NEWINSTREC);
1) STK[TOP] := ZERODATUM;
1) with STK[TOP] do
1) begin
1) CODESTART := RESCODESTART;
1) DTYPE := TYPB;
1) NVPAS := 1; (*make it not look like a constant. Not needed?*)
1) FINDRG;
1) VPA1.VPA.WHICH := RGS;
1) VPA1.VPA.RGADR := NXTRG;
1) (*where it will go if it becomes bintval*)
1) BREPRES := BJUMP;
1) BTRUELIST := EMPTYJUMPLIST;
1) BFALSELIST := EMPTYJUMPLIST;
1) BJUMPON := false;
1) BFALLTHRUSKIPLOC := SKIPLOC;
1) end (*with STK[TOP] do*);
1) end (*PEQU,...,PLES*);
**** File 2) SOPG14.PAS[SOP,S1], Page 48 line 177
2) if TYP = TYPS then COMPARE_SETS
2) else (*TYP <> TYPS*)
2) begin
2) RESCODESTART := STK[TOP-1].CODESTART;
2) if TYP <> TYPM then
2) begin
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 47,48
2) RESTYPE := COMPARE_COERCE_TYPE
2) [STK[TOP-1].DTYPE, STK[TOP].DTYPE];
2) if RESTYPE = ILLCOMP then
2) ERROR (WCOMPARE_ILLEGAL)
2) else if RESTYPE <> TYP then
2) (*peg 17MAY79*) if (TYP = TYPI) and ((RESTYPE = TYPQ) or (RESTYPE = TYPH)) then
2) (*peg 17MAY79*) RESTYPE := TYPI
2) else
2) ERROR (WWRONG_COMPARE);
2) COERCE_DATUM (TOP-1, RESTYPE);
2) COERCE_DATUM (TOP, RESTYPE);
2) if (RESTYPE in [TYPA, TYPI]) and
2) (STK[TOP-1].FINALIND=IND0) and (STK[TOP].FINALIND=IND0) then
2) begin (*Bring constant parts to one side.*)
2) if not ((STK[TOP-1].FPA.WHICH = MEM) and
2) (STK[TOP].FPA.WHICH = MEM)) then
2) ASSERTFAIL('PEQU,PNEQ001');
2) STK[TOP].FPA.MEMADR.DSPLMT := STK[TOP].FPA.MEMADR.DSPLMT
2) - STK[TOP-1].FPA.MEMADR.DSPLMT;
2) STK[TOP-1].FPA.MEMADR.DSPLMT := 0;
2) end (*Bring constant parts to one side.*);
2) if RESTYPE = TYPB then
2) begin
2) if STK[TOP-1].BREPRES = BJUMP then
2) BJUMP_TO_BINTVAL (TOP-1);
2) if STK[TOP].BREPRES = BJUMP then
2) BJUMP_TO_BINTVAL (TOP);
2) (*Note : <=,>=,<,> could be optimized as and, or are.*)
2) end;
2) S1OP := COMPARE_OP[S1SIZE[RESTYPE], OPC];
2) GET_OPERAND (OPND1, TOP-1);
2) GET_OPERAND (OPND2, TOP);
2) LOADSTACKEXCEPT (TOP-1, TOP);
2) if not RISFREE[S1RTB] and (RTBUSER < TOP-1) then
2) MOVE_AND_FREE_RTB;
2) FREEDATUMREGS (TOP);
2) POPTOP;
2) FREEDATUMREGS (TOP);
2) end (*TYP <> TYPM*)
2) else
2) begin (*TYP = TYPM*)
2) if not(STK[TOP-1].DTYPE in [TYPA, TYPM]) or
2) not(STK[TOP].DTYPE in [TYPA, TYPM]) then
2) ERROR (WCOMPM_NEEDS_ADDR);
2) (* make sure the zero and CPLPL global are free (to prevent errors) *)
2) ALLOCGBL (S1GBLZ);
2) OP1GBL := S1GCPLPL;
2) ALLOCGBL (OP1GBL);
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 47,48
2) OP1GBL := succ(OP1GBL);
2) ALLOCGBL (OP1GBL);
2) OP1GBL := succ(OP1GBL);
2) ALLOCGBL (OP1GBL);
2) OP1GBL := succ(OP1GBL);
2) ALLOCGBL (OP1GBL);
2) OP1GBL := succ(OP1GBL);
2) ALLOCGBL (OP1GBL);
2) (* initialize the global zero *)
2) OP1GBL := S1GBLZ;
2) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
2) EMITXOP (XMOV_S_S, OPND1, ZERO_OP);
2) (* initialize the CPLPL block-descriptor *)
2) OP1GBL := S1GCPLPL;
2) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
2) IMM_OPERAND (OPND2, S1GBLZ*WORDUNITS);
2) EMITXOP (XMOV_S_S, OPND1, OPND2);
2) OP1GBL := succ(OP1GBL);
2) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
2) MOVE_QUANTITY (OPND1, TOP-1);
2) OP1GBL := succ(OP1GBL);
2) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
2) IMM_OPERAND (OPND2, I1);
2) EMITXOP (XMOV_S_S, OPND1, OPND2);
2) OP1GBL := succ(OP1GBL);
2) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
2) MOVE_QUANTITY (OPND1, TOP);
2) OP1GBL := succ(OP1GBL);
2) ADDR_OPERAND (OPND1, OP1GBL*WORDUNITS);
2) IMM_OPERAND (OPND2, I1);
2) EMITXOP (XMOV_S_S, OPND1, OPND2);
2) (* emit the BLKCMP and subsequent flag test *)
2) ADDR_OPERAND (OPND2, S1GCPLPL*WORDUNITS); (*LCW*)
2) FREEDATUMREGS(TOP); (*EJG 16JAN79*)
2) FREEDATUMREGS(TOP-1); (*EJG 16JAN79*)
2) FINDRG;
2) OP1RG := NXTRG;
2) REG_OPERAND (OPND1, OP1RG);
2) EMITXOP (BLKCMP_X_Q[OPC], OPND1, OPND2);
2) DEST := OP1RG;
2) LOADSTACKEXCEPT (TOP-1, TOP);
2) POPTOP;
2) REG_OPERAND (OPND1, DEST);
2) IMM_OPERAND (OPND2, S1TRUEFLAG);
2) S1OP := XSKP_EQL_S;
2) if not RISFREE[S1RTB] then MOVE_AND_FREE_RTB;
2) FREERG_S (DEST);
2) (* free the global zero and CPLPL global *)
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 47,48
2) FREEGBL_S (S1GBLZ);
2) OP1GBL := S1GCPLPL;
2) FREEGBL_S (OP1GBL);
2) OP1GBL := succ(OP1GBL);
2) FREEGBL_S (OP1GBL);
2) OP1GBL := succ(OP1GBL);
2) FREEGBL_S (OP1GBL);
2) OP1GBL := succ(OP1GBL);
2) FREEGBL_S (OP1GBL);
2) OP1GBL := succ(OP1GBL);
2) FREEGBL_S (OP1GBL);
2) end (*TYPM*);
2) SKIPLOC := NEWINSTREC;
2) EMITSOP (S1OP, 0, OPND1, OPND2, nil);
2) EMITJOP (XJMPA, 0, UNUSED_OP, ZERO_OP, nil);
2) FIXSOP (SKIPLOC, NEWINSTREC);
2) STK[TOP] := ZERODATUM;
2) with STK[TOP] do
2) begin
2) CODESTART := RESCODESTART;
2) DTYPE := TYPB;
2) NVPAS := 1; (*make it not look like a constant. Not needed?*)
2) FINDRG;
2) VPA1.VPA.WHICH := RGS;
2) VPA1.VPA.RGADR := NXTRG;
2) (*where it will go if it becomes bintval*)
2) BREPRES := BJUMP;
2) BTRUELIST := EMPTYJUMPLIST;
2) BFALSELIST := EMPTYJUMPLIST;
2) BJUMPON := false;
2) BFALLTHRUSKIPLOC := SKIPLOC;
2) end (*with STK[TOP] do*);
2) end (*TYP <> TYPS*)
2) end (*PEQU,...,PLES*);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 47 line 270
1) FREEREGSBUTONE (TOP, DEST);
1) POPTOP;
1) FREEREGSBUTONE (TOP, DEST);
1) REG_DATUM (TOP, RESCODESTART, TYPB, DEST);
**** File 2) SOPG14.PAS[SOP,S1], Page 48 line 405
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) POPTOP;
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) REG_DATUM (TOP, RESCODESTART, TYPB, DEST);
***************
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 47,48
**** File 1) SOPZ12.PAS[SOP,S1], Page 48 line 17
1) STK[TOP-1].PCNST := STK[TOP-1].PCNST - STK[TOP].PCNST
1) else if OPC = PINT then
1) STK[TOP-1].PCNST := STK[TOP-1].PCNST * STK[TOP].PCNST
1) else if OPC = PUNI then
1) STK[TOP-1].PCNST := STK[TOP-1].PCNST + STK[TOP].PCNST
1) else if not (false) then ASSERTFAIL('PDIF,PINT001');
**** File 2) SOPG14.PAS[SOP,S1], Page 49 line 17
2) (*setch*) SET_DIF(STK[TOP-1].SCNST, STK[TOP-1].SCNST, STK[TOP].SCNST)
2) else if OPC = PINT then
2) (*setch*) SET_INT(STK[TOP-1].SCNST, STK[TOP-1].SCNST, STK[TOP].SCNST)
2) else if OPC = PUNI then
2) (*setch*) SET_UNI(STK[TOP-1].SCNST, STK[TOP-1].SCNST, STK[TOP].SCNST)
2) else if not (false) then ASSERTFAIL('PDIF,PINT001');
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 48 line 31
1) GET_OPERAND(OPND1,TOP-1);
1) GET_OPERAND(OPND2,TOP);
1) ALLOC_AND_EMIT_TOP(DEST, S1OP, OPND1, OPND2,
1) true, true, true, TOP-1);
1) FREEREGSBUTONE(TOP,DEST); POPTOP;FREEREGSBUTONE(TOP,DEST);
1) REG_DATUM(TOP,STK[TOP].CODESTART,TYPS,DEST)
1) end (*not both constants*)
**** File 2) SOPG14.PAS[SOP,S1], Page 49 line 32
2) FINDRGBLOCK(NUMOFSETPARTS*2); (*setch...*)
2) DEST := NXTRG;
2) for I := 0 to (1 + SETPART_MAX*2) do
2) DESTREGS := DESTREGS + [DEST + I];
2) if not RISFREE[S1RTB] then MOVE_AND_FREE_RTB;
2) ALLOCRP(S1RTB);
2) for INDEX := 0 to SETPART_MAX do
2) begin
2) WHICHPART := INDEX;
2) GET_OPERAND(OPND1,TOP-1);
2) GET_OPERAND(OPND2,TOP);
2) EMITTOP(S1OP, 3, OPND1, OPND2); (*Result ==> RTB*)
2) REG_OPERAND(OPNDR, DEST + INDEX*2);
2) EMITXOP(XMOVMS_2, OPNDR, OPNDRTB);
2) end;
2) WHICHPART := 0;
2) FREERG_S(S1RTB);
2) FREEREGSBUTTHESE(TOP-1,DESTREGS);
2) FREEREGSBUTTHESE(TOP,DESTREGS);
2) REG_DATUM(TOP-1, STK[TOP].CODESTART, TYPS, DEST);
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 48,49
2) POPTOP; (*...setch*)
2) end (*not both constants*)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 48 line 60
1) PCNST := [FPA.MEMADR.DSPLMT];
1) FPA.MEMADR.DSPLMT := 0
1) end
**** File 2) SOPG14.PAS[SOP,S1], Page 49 line 77
2) SCNST := NULL_SET; (*setch*)
2) BUILD_SET(SCNST, FPA.MEMADR.DSPLMT); (*setch*)
2) end
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 48 line 65
1) IMM_OPERAND(OPND1,1);
1) GET_OPERAND(OPND2,STE);
1) ALLOC_AND_EMIT_TOP(DEST, XSHF_LF_D, OPND1, OPND2,
1) true, true, false, STE);
1) FREEREGSBUTONE(STE,DEST);
1) REG_DATUM(STE,CODESTART,TYPS,DEST)
1) end (*not constant*)
**** File 2) SOPG14.PAS[SOP,S1], Page 49 line 82
2) FINDRG; OPRRG := NXTRG; (*setch...*)
2) REG_OPERAND(OPNDR,OPRRG);
2) GET_OPERAND(OPND2,STE);
2) EMITXOP(XMOV_S_S, OPNDR, OPND2);
2) FREEREGSBUTTHESE(STE, [OPRRG]);
2) FINDRGBLOCK(NUMOFSETPARTS*2);
2) DEST := NXTRG;
2) for INDEX := SETPART_MAX downto 0 do
2) begin
2) WHICHPART := INDEX;
2) IMM_OPERAND(OPND2,1);
2) REG_OPERAND(OPND1, DEST + INDEX*2);
2) EMITXOP(XMOV_D_S,OPND1,OPND2);
2) EMITTOP(XSHF_LF_D, 0, OPND1, OPNDR);
2) if INDEX > 0 then
2) begin
2) IMM_OPERAND(OPND2, SET_SIZE div NUMOFSETPARTS);
2) EMITTOP(XSUB_S, 0, OPNDR, OPND2);
2) end;
2) end;
2) WHICHPART := 0;
2) REG_DATUM(STE, CODESTART, TYPS, DEST);
2) FREERG_S(OPRRG); (*...setch*)
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 48,49
2) end (*not constant*)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 48 line 83
1) FPA.MEMADR.DSPLMT :=
1) ord(STK[TOP-1].PCNST*STK[TOP].PCNST <> []);
1) PCNST := []
1) end;
**** File 2) SOPG14.PAS[SOP,S1], Page 49 line 120
2) SET_INT(SCNST, SCNST, STK[TOP].SCNST); (*setch...*)
2) FPA.MEMADR.DSPLMT := ord(SCNST <> NULL_SET);
2) SCNST := NULL_SET; (*...setch*)
2) end;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 48 line 91
1) RESCODESTART := STK[TOP-1].CODESTART;
1) GET_OPERAND(OPND1,TOP-1);
1) GET_OPERAND(OPND2,TOP);
1) LOADSTACKEXCEPT(TOP-1, TOP);
**** File 2) SOPG14.PAS[SOP,S1], Page 49 line 128
2) LOADSTACKEXCEPT(TOP-1, TOP);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 48 line 97
1) FREEDATUMREGS(TOP);
1) POPTOP;
1) FREEDATUMREGS(TOP);
1) SKIPLOC := NEWINSTREC;
1) EMITSOP (XSKP_NON_D, 0, OPND1, OPND2, nil);
1) EMITJOP (XJMPA, 0, UNUSED_OP, ZERO_OP, nil);
1) FIXSOP (SKIPLOC, NEWINSTREC);
1) STK[TOP] := ZERODATUM;
**** File 2) SOPG14.PAS[SOP,S1], Page 49 line 131
2) RESCODESTART := STK[TOP-1].CODESTART;
2) TMPJUMPLIST := EMPTYJUMPLIST; (*setch...*)
2) for INDEX := 0 to SETPART_MAX do
2) begin
2) WHICHPART := INDEX;
2) GET_OPERAND(OPND1,TOP-1);
2) GET_OPERAND(OPND2,TOP);
2) SKIPLOC := NEWINSTREC;
2) EMITSOP (XSKP_NON_D, 0, OPND1, OPND2, nil);
2) JUMPLOC := NEWINSTREC;
2) EMITJOP (XJMPA, 0, UNUSED_OP, ZERO_OP, nil);
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 48,49
2) if INDEX < SETPART_MAX then
2) ADD_JUMP_TO_JUMPLIST(TMPJUMPLIST, JUMPLOC);
2) FIXSOP (SKIPLOC, NEWINSTREC);
2) end;
2) WHICHPART := 0;
2) FREEDATUMREGS(TOP-1);
2) FREEDATUMREGS(TOP); (*...setch*)
2) POPTOP;
2) STK[TOP] := ZERODATUM;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 48 line 112
1) FINDRG;
1) VPA1.VPA.WHICH := RGS;
1) VPA1.VPA.RGADR := NXTRG;
1) (*where it will go if it becomes bintval*)
1) BTRUELIST := EMPTYJUMPLIST;
1) BFALSELIST := EMPTYJUMPLIST;
**** File 2) SOPG14.PAS[SOP,S1], Page 49 line 160
2) FINDRG;
2) VPA1.VPA.WHICH := RGS;
2) VPA1.VPA.RGADR := NXTRG;
2) (*where it will go if it becomes bintval*)
2) BTRUELIST := TMPJUMPLIST; (*setch*)
2) BFALSELIST := EMPTYJUMPLIST;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 48 line 358
1) FREEREGSBUTONE (TOP, DEST);
1) REG_DATUM (TOP, RESCODESTART, TYPI, DEST);
**** File 2) SOPG14.PAS[SOP,S1], Page 49 line 406
2) FREEREGSBUTTHESE(TOP, [DEST]);
2) REG_DATUM (TOP, RESCODESTART, TYPI, DEST);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 50 line 261
1) BJUMP_TO_BINTVAL(TOP) (*PTZ*)
1) end (*PPAR*);
**** File 2) SOPG14.PAS[SOP,S1], Page 51 line 261
2) BJUMP_TO_BINTVAL(TOP); (*PTZ*)
2) if STK[TOP].DTYPE = TYPS then (*peg 17MAY79...*)
2) begin
2) (*Store on top of CALLER'S runtime stack, make datum TYPA; there
2) really ought to be an expression-temp management class of
2) routines to do this sort of thing (it's also needed for the
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 50,51
2) PCUP instruction, and should be used to allocate/deallocate
2) stack temps when there are no more expr temp regs).*)
2) with MSTSTK[MSTTOP], NESTDISPLAY[CURLVL] do
2) begin
2) DSPL := EVALSAVESTART + NUMOFSETPARTS*DOUBLEWORDUNITS;
2) EVALSAVESTART := DSPL;
2) if DSPL > EVALSAVE.SIZE then EVALSAVE.SIZE := DSPL;
2) REGDISP_OPERAND (OPND1, DISPLAY,
2) -NESTDISPLAY[CURLVL].LOCALDATAOFFSET-DSPL);
2) MOVE_QUANTITY(OPND1, TOP);
2) end (*with MSTSTK...do*);
2) FREEDATUMREGS(TOP);
2) STK[TOP] := ZERODATUM;
2) with STK[TOP] do
2) begin
2) DTYPE := TYPA;
2) FPA.WHICH := MEM;
2) FPA.MEMADR.LVL := CURLVL;
2) FPA.MEMADR.DSPLMT := -DSPL;
2) TRANSLATE_LVLDSP(FPA);
2) end (*with STK[TOP] do*);
2) end (*if STK[TOP].DTYPE = TYPS*); (*...peg 17MAY79*)
2) end (*PPAR*);
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 52 line 6
1) if ord(OPC) <= MAXSETEL then
1) JUMPTABLE_IN_PROGRESS :=
**** File 2) SOPG14.PAS[SOP,S1], Page 53 line 6
2) if ord(OPC) <= HOST_SET_MAX then
2) JUMPTABLE_IN_PROGRESS :=
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 52 line 15
1) if ord(OPC) <= MAXSETEL then
1) if OPC in [PEOF, PNEW, PSAV, PRST] then
**** File 2) SOPG14.PAS[SOP,S1], Page 53 line 15
2) if ord(OPC) <= HOST_SET_MAX then
2) if OPC in [PEOF, PNEW, PSAV, PRST] then
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 52 line 101
1) TYPS : PCNST := P1;
1) TYPA, TYPD, TYPH, TYPJ, TYPM, TYPP, TYPQ, TYPX :
**** File 2) SOPG14.PAS[SOP,S1], Page 53 line 101
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 52,53
2) TYPS : SCNST := P1;
2) TYPA, TYPD, TYPH, TYPJ, TYPM, TYPP, TYPQ, TYPX :
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 52 line 251
1) if ord(OPC) <= MAXSETEL then
1) if (OPC in [PFJP,PUJP,PXJP,PMOV,PSRO,PSTO, (* PSTR, *) PLAB]) (*PN*)
**** File 2) SOPG14.PAS[SOP,S1], Page 53 line 251
2) if ord(OPC) <= HOST_SET_MAX then
2) if (OPC in [PFJP,PUJP,PXJP,PMOV,PSRO,PSTO, (* PSTR, *) PLAB]) (*PN*)
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 53 line 93
1) returning it in S. This procedure changes when
1) sets get bigger for the real machine. PDP-10 VERSION *)
1) var I, J, N : integer;
1) INTS : array[1..4] of integer;
1) begin
**** File 2) SOPG14.PAS[SOP,S1], Page 54 line 93
2) returning it in S. PDP-10 version. *)
2) var I, J, N : integer;
2) INTS : array[1..NUMOFSETOPND] of integer;
2) begin
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 53 line 101
1) for I := 1 to 4 do READINT(INTS[I]);
1) S := [];
1) N := 0;
1) for I := 4 downto 1 do
1) for J := 1 to 16 do
1) begin
1) if odd(INTS[I]) then S := S + [N];
1) INTS[I] := INTS[I] div 2;
**** File 2) SOPG14.PAS[SOP,S1], Page 54 line 100
2) for I := 1 to NUMOFSETOPND do READINT(INTS[I]);
2) S := NULL_SET; (*setch*)
2) N := 0;
2) for I := NUMOFSETOPND downto 1 do
2) for J := 1 to 16 do
2) begin
2) if odd(INTS[I]) then BUILD_SET(S,N); (*setch*)
2) INTS[I] := INTS[I] div 2;
***************
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 53,54
**** File 1) SOPZ12.PAS[SOP,S1], Page 54 line 38
1) ZEROS1WORD.LHALF := 0; ZEROS1WORD.RHALF := 0;
**** File 2) SOPG14.PAS[SOP,S1], Page 55 line 38
2) for I := 0 to SETREP_MAX DO (*setch*) (*X10S1*)
2) NULL_SET[I] := [ ]; (*setch*) (*X10S1*)
2) (* NULL_SET := [ ]; *) (*setch*) (*X10S1*)
2) WHICHPART := 0; (*setch*)
2) ZEROS1WORD.LHALF := 0; ZEROS1WORD.RHALF := 0;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 54 line 103
1) PCNST := [ ]; RCNST := 0.0;
1) FINALIND := IND0; FPA := ZEROFPA;
**** File 2) SOPG14.PAS[SOP,S1], Page 55 line 108
2) SCNST := NULL_SET; RCNST := 0.0; (*setch*)
2) FINALIND := IND0; FPA := ZEROFPA;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 54 line 178
1) S1SIZE[TYPI] := S1S; S1SIZE[TYPS] := S1D;
1) S1SIZE[TYPJ] := S1Q; S1SIZE[TYPX] := S1D;
**** File 2) SOPG14.PAS[SOP,S1], Page 55 line 183
2) S1SIZE[TYPI] := S1S; S1SIZE[TYPS] := S1D; (*setch ?? PEG*)
2) S1SIZE[TYPJ] := S1Q; S1SIZE[TYPX] := S1D;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 54 line 198
1) FUNCUNITS[TYPS] := DOUBLEWORDUNITS;
1) FUNCUNITS[TYPX] := DOUBLEWORDUNITS;
**** File 2) SOPG14.PAS[SOP,S1], Page 55 line 203
2) FUNCUNITS[TYPS] := 0; (*setch*)
2) FUNCUNITS[TYPX] := DOUBLEWORDUNITS;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 54 line 217
1) MOV_X_X[TYPA] := XMOV_S_S; MOV_X_X[TYPM] := XMOV_S_S;
1) MOV_X_X[TYPB] := XMOV_Q_Q; MOV_X_X[TYPN] := XMOV_S_S;
1) MOV_X_X[TYPC] := XMOV_Q_Q; MOV_X_X[TYPP] := XILLEGAL;
1) MOV_X_X[TYPD] := XMOV_D_D; MOV_X_X[TYPQ] := XMOV_Q_Q;
1) MOV_X_X[TYPH] := XMOV_H_H; MOV_X_X[TYPR] := XMOV_S_S;
1) MOV_X_X[TYPI] := XMOV_S_S; MOV_X_X[TYPS] := XMOV_D_D;
1) MOV_X_X[TYPJ] := XILLEGAL; MOV_X_X[TYPX] := XMOV_D_D;
1) MOVMQ_N[1] := XMOV_Q_Q; MOVMQ_N[2] := XMOVMQ_2;
1) SOPZ12.PAS[SOP,S1] and 2) SOPG14.PAS[SOP,S1] 5-24-79 08:49 pages 54,55
**** File 2) SOPG14.PAS[SOP,S1], Page 55 line 222
2) MOVMQ_N[1] := XMOV_Q_Q; MOVMQ_N[2] := XMOVMQ_2;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 54 line 259
1) ABS_X[TYPA] := XILLEGAL; ABS_X[TYPM] := XILLEGAL;
**** File 2) SOPG14.PAS[SOP,S1], Page 55 line 256
2) MOV_X_X[TYPA] := XMOV_S_S; MOV_X_X[TYPM] := XMOV_S_S;
2) MOV_X_X[TYPB] := XMOV_Q_Q; MOV_X_X[TYPN] := XMOV_S_S;
2) MOV_X_X[TYPC] := XMOV_Q_Q; MOV_X_X[TYPP] := XILLEGAL;
2) MOV_X_X[TYPD] := XMOV_D_D; MOV_X_X[TYPQ] := XMOV_Q_Q;
2) MOV_X_X[TYPH] := XMOV_H_H; MOV_X_X[TYPR] := XMOV_S_S;
2) MOV_X_X[TYPI] := XMOV_S_S; (*setch*) MOV_X_X[TYPS] := MOVMS_N[NUMOFSETPARTS*2];
2) MOV_X_X[TYPJ] := XILLEGAL; MOV_X_X[TYPX] := XMOV_D_D;
2) ABS_X[TYPA] := XILLEGAL; ABS_X[TYPM] := XILLEGAL;
***************
**** File 1) SOPZ12.PAS[SOP,S1], Page 55 line 19
1) MOV_X_Y [TYPS, TYPS] := XMOV_D_D;
1) MOV_X_Y [TYPX, TYPX] := XMOV_D_D;
**** File 2) SOPG14.PAS[SOP,S1], Page 56 line 19
2) MOV_X_Y [TYPS, TYPS] := MOVMS_N[NUMOFSETPARTS*2]; (*setch*)
2) MOV_X_Y [TYPX, TYPX] := XMOV_D_D;
***************